//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft Corporation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

#define o(form) OPBYTE_ ## form
#ifndef f
# define f(form) FORM_ ## form
#endif

//    opcode         layout   attribute      byte2  form         opbyte         dope                          leadin     legal form
MACRO(ADD          , Reg2   , OpSideEffect , R000 , f(BINOP)   , o(ADD)       , DOPEQ|DSETCC|DCOMMOP        , OLB_NONE , LEGAL_RM_RM_RMI)
MACRO(ADDPD        , Reg2   , None         , RNON , f(MODRM)   , o(ADDPD)     , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(ADDPS        , Reg2   , None         , RNON , f(MODRM)   , o(ADDPS)     , DNO16|DOPEQ|DCOMMOP         , OLB_0F   , LEGAL_R_R_RM   )
MACRO(ADDSD        , Reg2   , None         , RNON , f(MODRM)   , o(ADDSD)     , DNO16|DOPEQ|DCOMMOP|DF2     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(ADDSS        , Reg2   , None         , RNON , f(MODRM)   , o(ADDSS)     , DNO16|DOPEQ|DF3|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(AND          , Reg2   , OpSideEffect , R100 , f(BINOP)   , o(AND)       , DOPEQ|DSETCC|DCOMMOP        , OLB_NONE , LEGAL_RM_RM_RMI)
MACRO(ANDNPD       , Reg2   , None         , RNON , f(MODRM)   , o(ANDNPD)    , DNO16|DOPEQ|D66             , OLB_NONE , LEGAL_R_R_RM   )
MACRO(ANDNPS       , Reg2   , None         , RNON , f(MODRM)   , o(ANDNPS)    , DNO16|DOPEQ                 , OLB_0F   , LEGAL_R_R_RM   )
MACRO(ANDPD        , Reg2   , None         , RNON , f(MODRM)   , o(ANDPD)     , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(ANDPS        , Reg2   , None         , RNON , f(MODRM)   , o(ANDPS)     , DNO16|DOPEQ|DCOMMOP         , OLB_0F   , LEGAL_R_R_RM   )
MACRO(BSF          , Reg2   , None         , RNON , f(MODRM)   , o(BSF)       , DDST|DSETCC                 , OLB_0F   , LEGAL_R_RM     )
MACRO(BSR          , Reg2   , None         , RNON , f(MODRM)   , o(BSR)       , DDST|DSETCC                 , OLB_0F   , LEGAL_R_RM     )
MACRO(BT           , Reg2   , OpSideEffect , R100 , f(SPMOD)   , o(BT)        , DSETCC                      , OLB_0F   , LEGAL_N_RM_RI  )
MACRO(BTR          , Reg2   , OpSideEffect , R110 , f(SPMOD)   , o(BTR)       , DOPEQ|DSETCC                , OLB_0F   , LEGAL_RM_RM_RI )
MACRO(BTS          , Reg2   , OpSideEffect , R101 , f(SPMOD)   , o(BTS)       , DOPEQ|DSETCC                , OLB_0F   , LEGAL_RM_RM_RI )
MACRO(CALL         , CallI  , OpSideEffect , R010 , f(CALL)    , o(CALL)      , DSETCC                      , OLB_NONE , LEGAL_CALL     )
MACRO(CDQ          , Empty  , OpSideEffect , RNON , f(NO)      , o(CDQ)       , DNO16                       , OLB_NONE , LEGAL_R        )
MACRO(CMOVA        , Reg2   , None         , RNON , f(MODRM)   , o(CMOVA)     , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVAE       , Reg2   , None         , RNON , f(MODRM)   , o(CMOVAE)    , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVB        , Reg2   , None         , RNON , f(MODRM)   , o(CMOVB)     , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVBE       , Reg2   , None         , RNON , f(MODRM)   , o(CMOVBE)    , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVE        , Reg2   , None         , RNON , f(MODRM)   , o(CMOVE)     , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVG        , Reg2   , None         , RNON , f(MODRM)   , o(CMOVG)     , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVGE       , Reg2   , None         , RNON , f(MODRM)   , o(CMOVGE)    , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVL        , Reg2   , None         , RNON , f(MODRM)   , o(CMOVL)     , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVLE       , Reg2   , None         , RNON , f(MODRM)   , o(CMOVLE)    , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVNE       , Reg2   , None         , RNON , f(MODRM)   , o(CMOVNE)    , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVNO       , Reg2   , None         , RNON , f(MODRM)   , o(CMOVNO)    , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVNP       , Reg2   , None         , RNON , f(MODRM)   , o(CMOVNP)    , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVNS       , Reg2   , None         , RNON , f(MODRM)   , o(CMOVNS)    , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVO        , Reg2   , None         , RNON , f(MODRM)   , o(CMOVO)     , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVP        , Reg2   , None         , RNON , f(MODRM)   , o(CMOVP)     , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMOVS        , Reg2   , None         , RNON , f(MODRM)   , o(CMOVS)     , DDST|DUSECC                 , OLB_0F   , LEGAL_CUSTOM   )
MACRO(CMP          , Empty  , OpSideEffect , R111 , f(BINOP)   , o(CMP)       , DSETCC                      , OLB_NONE , LEGAL_N_RM_RMI )
MACRO(CMPEQPD      , Empty  , None         , RNON , f(MODRM)   , o(CMPPD)     , D66|DSSE|DOPEQ              , OLB_0F   , LEGAL_R_R_RM   )
MACRO(CMPEQPS      , Empty  , None         , RNON , f(MODRM)   , o(CMPPS)     , DSSE|DOPEQ                  , OLB_0F   , LEGAL_R_R_RM   )
MACRO(CMPLEPD      , Empty  , None         , RNON , f(MODRM)   , o(CMPPD)     , D66|DSSE|DOPEQ              , OLB_0F   , LEGAL_R_R_RM   )
MACRO(CMPLEPS      , Empty  , None         , RNON , f(MODRM)   , o(CMPPS)     , DSSE|DOPEQ                  , OLB_0F   , LEGAL_R_R_RM   )
MACRO(CMPLTPD      , Empty  , None         , RNON , f(MODRM)   , o(CMPPD)     , D66|DSSE|DOPEQ              , OLB_0F   , LEGAL_R_R_RM   )
MACRO(CMPLTPS      , Empty  , None         , RNON , f(MODRM)   , o(CMPPS)     , DSSE|DOPEQ                  , OLB_0F   , LEGAL_R_R_RM   )
MACRO(CMPNEQPD     , Empty  , None         , RNON , f(MODRM)   , o(CMPPD)     , D66|DSSE|DOPEQ              , OLB_0F   , LEGAL_R_R_RM   )
MACRO(CMPNEQPS     , Empty  , None         , RNON , f(MODRM)   , o(CMPPS)     , DSSE|DOPEQ                  , OLB_0F   , LEGAL_R_R_RM   )
MACRO(CMPUNORDPS   , Empty  , None         , RNON , f(MODRM)   , o(CMPPS)     , DSSE|DOPEQ                  , OLB_0F   , LEGAL_R_R_RM   )
MACRO(CMPXCHG8B    , Reg1   , OpSideEffect , R001 , f(SPMOD)   , o(CMPXCHG8B) , DNO16|DSETCC                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(COMISD       , Empty  , OpSideEffect , RNON , f(MODRM)   , o(COMISD)    , DNO16|D66|DSETCC            , OLB_0F   , LEGAL_N_R_RM   )
MACRO(COMISS       , Empty  , OpSideEffect , RNON , f(MODRM)   , o(COMISS)    , DNO16|DSETCC                , OLB_0F   , LEGAL_N_R_RM   )
MACRO(CQO          , Empty  , OpSideEffect , RNON , f(NO)      , o(CQO)       , DNO16                       , OLB_NONE , LEGAL_R        )
MACRO(CVTDQ2PD     , Reg2   , None         , RNON , f(MODRM)   , o(CVTDQ2PD)  , DDST|DNO16|DF3              , OLB_0F   , LEGAL_R_RM     )
MACRO(CVTDQ2PS     , Reg2   , None         , RNON , f(MODRM)   , o(CVTDQ2PS)  , DDST|DNO16                  , OLB_0F   , LEGAL_R_RM     )
MACRO(CVTPD2PS     , Reg2   , None         , RNON , f(MODRM)   , o(CVTPD2PS)  , DDST|DNO16|D66              , OLB_0F   , LEGAL_R_RM     )
MACRO(CVTPS2PD     , Reg2   , None         , RNON , f(MODRM)   , o(CVTPS2PD)  , DDST|DNO16                  , OLB_0F   , LEGAL_R_RM     )
MACRO(CVTSD2SI     , Reg2   , None         , RNON , f(MODRM)   , o(CVTSD2SI)  , DDST|DNO16|DF2              , OLB_0F   , LEGAL_R_RM     )
MACRO(CVTSD2SS     , Reg2   , None         , RNON , f(MODRM)   , o(CVTSD2SS)  , DDST|DNO16|DF2              , OLB_0F   , LEGAL_R_RM     )
MACRO(CVTSI2SD     , Reg2   , None         , RNON , f(MODRM)   , o(CVTSI2SD)  , DDST|DNO16|DF2|DREXSRC      , OLB_0F   , LEGAL_R_RM     )
MACRO(CVTSI2SS     , Reg2   , None         , RNON , f(MODRM)   , o(CVTSI2SS)  , DDST|DNO16|DF3|DREXSRC      , OLB_0F   , LEGAL_R_RM     )
MACRO(CVTSS2SD     , Reg2   , None         , RNON , f(MODRM)   , o(CVTSS2SD)  , DDST|DNO16|DF3              , OLB_0F   , LEGAL_R_RM     )
MACRO(CVTSS2SI     , Reg2   , None         , RNON , f(MODRM)   , o(CVTSS2SI)  , DDST|DNO16|DF3              , OLB_0F   , LEGAL_R_RM     )
MACRO(CVTTPD2DQ    , Reg2   , None         , RNON , f(MODRM)   , o(CVTTPD2DQ) , DDST|DNO16|D66              , OLB_0F   , LEGAL_R_RM     )
MACRO(CVTTPS2DQ    , Reg2   , None         , RNON , f(MODRM)   , o(CVTTPS2DQ) , DDST|DNO16|DF3              , OLB_0F   , LEGAL_R_RM     )
MACRO(CVTTSD2SI    , Reg2   , None         , RNON , f(MODRM)   , o(CVTTSD2SI) , DDST|DNO16|DF2              , OLB_0F   , LEGAL_R_RM     )
MACRO(CVTTSS2SI    , Reg2   , None         , RNON , f(MODRM)   , o(CVTTSS2SI) , DDST|DNO16|DF3              , OLB_0F   , LEGAL_R_RM     )
MACRO(DEC          , Reg2   , OpSideEffect , R001 , f(INCDEC)  , o(DEC)       , DOPEQ|DSETCC                , OLB_NONE , LEGAL_RM_RM    )
MACRO(DIV          , Reg3   , None         , R110 , f(MULDIV)  , o(DIV)       , DSETCC                      , OLB_NONE , LEGAL_R_R_RM   )
MACRO(DIVPD        , Reg3   , None         , RNON , f(MODRM)   , o(DIVPD)     , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(DIVPS        , Reg3   , None         , RNON , f(MODRM)   , o(DIVPS)     , DNO16|DOPEQ                 , OLB_0F   , LEGAL_R_R_RM   )
MACRO(DIVSD        , Reg3   , None         , RNON , f(MODRM)   , o(DIVSD)     , DNO16|DOPEQ|DF2             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(DIVSS        , Reg3   , None         , RNON , f(MODRM)   , o(DIVSS)     , DNO16|DOPEQ|DF3             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(IDIV         , Reg3   , None         , R111 , f(MULDIV)  , o(IDIV)      , DSETCC                      , OLB_NONE , LEGAL_R_R_RM   )
MACRO(IMUL         , Reg3   , OpSideEffect , R101 , f(MULDIV)  , o(IMUL)      , DSETCC                      , OLB_NONE , LEGAL_R_R_RM   )
MACRO(IMUL2        , Reg3   , OpSideEffect , RNON , f(SPMOD)   , o(IMUL2)     , DOPEQ|DSETCC|DCOMMOP        , OLB_0F   , LEGAL_R_R_RMI  )
MACRO(INC          , Reg2   , OpSideEffect , R000 , f(INCDEC)  , o(INC)       , DOPEQ|DSETCC                , OLB_NONE , LEGAL_RM_RM    )
MACRO(INT          , Reg1   , OpSideEffect , RNON , f(SPECIAL) , o(INT)       , DUSECC|DSETCC               , OLB_NONE , LEGAL_N_I      )
MACRO(JA           , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JA)        , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JAE          , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JAE)       , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JB           , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JB)        , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JBE          , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JBE)       , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JEQ          , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JEQ)       , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JGE          , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JGE)       , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JGT          , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JGT)       , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JLE          , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JLE)       , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JLT          , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JLT)       , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JMP          , Br     , OpSideEffect , R100 , f(JMP)     , o(JMP)       , DNO16                       , OLB_NONE , LEGAL_CUSTOM   )
MACRO(JNE          , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JNE)       , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JNO          , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JNO)       , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JNP          , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JNP)       , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JNSB         , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JNSB)      , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JO           , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JO)        , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JP           , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JP)        , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(JSB          , BrReg2 , OpSideEffect , RNON , f(JCC)     , o(JSB)       , DUSECC|DNO16                , OLB_0F   , LEGAL_CUSTOM   )
MACRO(LEA          , Reg2   , None         , RNON , f(MODRM)   , o(LEA)       , DDST                        , OLB_NONE , LEGAL_R_M      )
MACRO(LOCKCMPXCHG8B, Reg1   , OpSideEffect , R001 , f(SPMOD)   , o(CMPXCHG8B) , DNO16|DSETCC|DLOCK          , OLB_0F   , LEGAL_CUSTOM   )
MACRO(LOCKOR       , Reg2   , OpSideEffect , R001 , f(BINOP)   , o(OR)        , DOPEQ|DSETCC|DCOMMOP|DLOCK  , OLB_NONE , LEGAL_RM_RM_RMI)
MACRO(LZCNT        , Reg2   , None         , RNON , f(MODRM)   , o(LZCNT)     , DF3|DSETCC|DDST             , OLB_0F   , LEGAL_R_RM     )
MACRO(MAXPD        , Reg2   , None         , RNON , f(MODRM)   , o(MAXPD)     , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(MAXPS        , Reg2   , None         , RNON , f(MODRM)   , o(MAXPS)     , DNO16|DOPEQ                 , OLB_0F   , LEGAL_R_R_RM   )
MACRO(MINPD        , Reg2   , None         , RNON , f(MODRM)   , o(MINPD)     , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(MINPS        , Reg2   , None         , RNON , f(MODRM)   , o(MINPS)     , DNO16|DOPEQ                 , OLB_0F   , LEGAL_R_R_RM   )
MACRO(MOV_TRUNC    , Reg2   , None         , R000 , f(MOV)     , o(MOV)       , DDST|DMOV                   , OLB_NONE , LEGAL_R_RMI    )
MACRO(MOV          , Reg2   , None         , R000 , f(MOV)     , o(MOV)       , DDST|DMOV                   , OLB_NONE , LEGAL_CUSTOM   )
MACRO(MOVAPD       , Reg2   , None         , RNON , f(SPECIAL) , o(MOVAPD)    , DDST|DNO16|D66              , OLB_0F   , LEGAL_RM_RM    )
MACRO(MOVAPS       , Reg2   , None         , RNON , f(SPECIAL) , o(MOVAPS)    , DDST|DNO16                  , OLB_0F   , LEGAL_RM_RM    )
MACRO(MOVD         , Reg2   , None         , RNON , f(SPECIAL) , o(MOVD)      , DDST|DNO16|D66              , OLB_0F   , LEGAL_RM_RM    )
MACRO(MOVHLPS      , Reg2   , None         , RNON , f(SPECIAL) , o(MOVHLPS)   , DDST|DNO16                  , OLB_0F   , LEGAL_R_R      )
MACRO(MOVHPD       , Reg2   , None         , RNON , f(SPECIAL) , o(MOVHPD)    , DDST|DNO16|D66              , OLB_0F   , LEGAL_RM_RM    )
MACRO(MOVLHPS      , Reg2   , None         , RNON , f(SPECIAL) , o(MOVLHPS)   , DDST|DNO16                  , OLB_0F   , LEGAL_R_R      )
MACRO(MOVLPD       , Reg2   , None         , RNON , f(SPECIAL) , o(MOVLPD)    , DDST|DNO16|D66              , OLB_0F   , LEGAL_RM_RM    )
MACRO(MOVMSKPD     , Reg2   , None         , RNON , f(SPECIAL) , o(MOVMSKPD)  , DDST|DNO16|D66              , OLB_0F   , LEGAL_R_R      )
MACRO(MOVMSKPS     , Reg2   , None         , RNON , f(SPECIAL) , o(MOVMSKPS)  , DDST|DNO16                  , OLB_0F   , LEGAL_R_R      )
MACRO(MOVQ         , Reg2   , None         , RNON , f(SPECIAL) , o(MOVQ)      , DDST|DNO16|D66              , OLB_0F   , LEGAL_RM_RM    )
MACRO(MOVSD_ZERO   , Reg2   , None         , RNON , f(MODRM)   , o(MOVSD)     , 0                           , OLB_NONE , LEGAL_RM       )
MACRO(MOVSD        , Reg2   , None         , RNON , f(SPECIAL) , o(MOVSD)     , DDST|DNO16|DF2              , OLB_0F   , LEGAL_RM_RM    )
MACRO(MOVSS        , Reg2   , None         , RNON , f(SPECIAL) , o(MOVSS)     , DDST|DNO16|DF3              , OLB_0F   , LEGAL_RM_RM    )
MACRO(MOVSX        , Reg2   , None         , RNON , f(MODRM)   , o(MOVSX)     , DDST                        , OLB_0F   , LEGAL_RM_RM    )
MACRO(MOVSXD       , Reg2   , None         , RNON , f(MODRM)   , o(MOVSXD)    , DDST                        , OLB_NONE , LEGAL_R_RM     )
MACRO(MOVSXW       , Reg2   , None         , RNON , f(MODRM)   , o(MOVSXW)    , DDST                        , OLB_0F   , LEGAL_RM_RM    )
MACRO(MOVUPS       , Reg2   , None         , RNON , f(SPECIAL) , o(MOVUPS)    , DDST|DNO16                  , OLB_0F   , LEGAL_RM_RM    )
MACRO(MOVZX        , Reg2   , None         , RNON , f(MODRM)   , o(MOVZX)     , DDST                        , OLB_0F   , LEGAL_R_RM     )
MACRO(MOVZXW       , Reg2   , None         , RNON , f(MODRM)   , o(MOVZXW)    , DDST                        , OLB_0F   , LEGAL_R_RM     )
MACRO(MULPD        , Reg3   , None         , RNON , f(MODRM)   , o(MULPD)     , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(MULPS        , Reg3   , None         , RNON , f(MODRM)   , o(MULPS)     , DNO16|DOPEQ|DCOMMOP         , OLB_0F   , LEGAL_R_R_RM   )
MACRO(MULSD        , Reg3   , None         , RNON , f(MODRM)   , o(MULSD)     , DNO16|DOPEQ|DF2             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(MULSS        , Reg3   , None         , RNON , f(MODRM)   , o(MULSS)     , DNO16|DOPEQ|DF3|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(NEG          , Reg2   , OpSideEffect , R011 , f(MODRMW)  , o(NEG)       , DOPEQ|DSETCC                , OLB_NONE , LEGAL_RM_RM    )
MACRO(NOP          , Empty  , None         , RNON , f(SPECIAL) , o(NOP)       , DNO16                       , OLB_NONE , LEGAL_CUSTOM   )
MACRO(NOT          , Reg2   , OpSideEffect , R010 , f(MODRMW)  , o(NOT)       , DOPEQ                       , OLB_NONE , LEGAL_RM_RM    )
MACRO(OR           , Reg2   , OpSideEffect , R001 , f(BINOP)   , o(OR)        , DOPEQ|DSETCC|DCOMMOP        , OLB_NONE , LEGAL_RM_RM_RMI)
MACRO(ORPS         , Reg2   , None         , R001 , f(MODRM)   , o(ORPS)      , DOPEQ|DOPEQ|DCOMMOP         , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PADDB        , Reg2   , None         , RNON , f(MODRM)   , o(PADDB)     , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PADDD        , Reg2   , None         , RNON , f(MODRM)   , o(PADDD)     , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PADDQ        , Reg2   , None         , RNON , f(MODRM)   , o(PADDQ)     , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PADDSB       , Reg2   , None         , RNON , f(MODRM)   , o(PADDSB)    , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PADDSW       , Reg2   , None         , RNON , f(MODRM)   , o(PADDSW)    , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PADDUSB      , Reg2   , None         , RNON , f(MODRM)   , o(PADDUSB)   , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PADDUSW      , Reg2   , None         , RNON , f(MODRM)   , o(PADDUSW)   , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PADDW        , Reg2   , None         , RNON , f(MODRM)   , o(PADDW)     , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PAND         , Reg2   , None         , RNON , f(MODRM)   , o(PAND)      , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PANDN        , Reg2   , None         , RNON , f(MODRM)   , o(PANDN)     , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PCMPEQB      , Reg2   , None         , RNON , f(MODRM)   , o(PCMPEQB)   , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PCMPEQD      , Reg2   , None         , RNON , f(MODRM)   , o(PCMPEQD)   , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PCMPEQW      , Reg2   , None         , RNON , f(MODRM)   , o(PCMPEQW)   , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PCMPGTB      , Reg2   , None         , RNON , f(MODRM)   , o(PCMPGTB)   , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PCMPGTD      , Reg2   , None         , RNON , f(MODRM)   , o(PCMPGTD)   , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PCMPGTW      , Reg2   , None         , RNON , f(MODRM)   , o(PCMPGTW)   , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PEXTRD       , Reg3   , None         , RNON , f(SPECIAL) , o(PEXTRD)    , DDST|DNO16|DSSE|D66         , OLB_0F3A , LEGAL_RM_R_I   )
MACRO(PEXTRQ       , Reg3   , None         , RNON , f(SPECIAL) , o(PEXTRQ)    , DDST|DNO16|D66|DREXSRC|DSSE , OLB_0F3A , LEGAL_RM_R_I   )
MACRO(PEXTRW       , Reg3   , None         , RNON , f(MODRM)   , o(PEXTRW)    , DDST|DNO16|D66|DSSE         , OLB_0F   , LEGAL_RM_R_I   )
MACRO(PINSRD       , Reg3   , None         , RNON , f(MODRM)   , o(PINSRD)    , DDST|DNO16|DSSE|D66         , OLB_0F3A , LEGAL_R_RM_I   )
MACRO(PINSRQ       , Reg3   , None         , RNON , f(MODRM)   , o(PINSRQ)    , DDST|DNO16|D66|DREXSRC|DSSE , OLB_0F3A , LEGAL_R_RM_I   )
MACRO(PINSRW       , Reg2   , None         , RNON , f(MODRM)   , o(PINSRW)    , DDST|DNO16|DSSE|D66         , OLB_0F   , LEGAL_R_RM_I   )
MACRO(PMAXSW       , Reg2   , None         , RNON , f(MODRM)   , o(PMAXSW)    , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PMAXUB       , Reg2   , None         , RNON , f(MODRM)   , o(PMAXUB)    , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PMINSW       , Reg2   , None         , RNON , f(MODRM)   , o(PMINSW)    , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PMINUB       , Reg2   , None         , RNON , f(MODRM)   , o(PMINUB)    , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PMOVMSKB     , Reg2   , None         , RNON , f(SPECIAL) , o(PMOVMSKB)  , DDST|DNO16|D66              , OLB_0F   , LEGAL_R_R      )
MACRO(PMULLW       , Reg2   , None         , RNON , f(MODRM)   , o(PMULLW)    , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PMULUDQ      , Reg2   , None         , RNON , f(MODRM)   , o(PMULUDQ)   , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(POP          , Reg1   , OpSideEffect , R000 , f(PSHPOP)  , o(POP)       , DDST                        , OLB_NONE , LEGAL_R_OR     )
MACRO(POPCNT       , Reg2   , None         , RNON , f(MODRM)   , o(POPCNT)    , DF3|DSETCC|DDST             , OLB_0F   , LEGAL_R_RM     )
MACRO(POR          , Reg2   , None         , RNON , f(MODRM)   , o(POR)       , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PSHUFD       , Reg3   , None         , RNON , f(MODRM)   , o(PSHUFD)    , DDST|DNO16|D66|DSSE         , OLB_0F   , LEGAL_R_RM_I   )
MACRO(PSLLD        , Reg2   , None         , R110 , f(SPECIAL) , o(PSLLD)     , DNO16|DOPEQ|D66|DSSE        , OLB_0F   , LEGAL_R_R_RI   )
MACRO(PSLLDQ       , Reg2   , None         , R111 , f(SPECIAL) , o(PSLLDQ)    , DDST|DNO16|DOPEQ|D66|DSSE   , OLB_0F   , LEGAL_R_R_RI   )
MACRO(PSLLQ        , Reg2   , None         , RNON , f(MODRM)   , o(PSLLQ)     , DNO16|DOPEQ|D66|DSSE        , OLB_0F   , LEGAL_R_R_RI   )
MACRO(PSLLW        , Reg2   , None         , R110 , f(SPECIAL) , o(PSLLW)     , DNO16|DOPEQ|D66|DSSE        , OLB_0F   , LEGAL_R_R_RI   )
MACRO(PSRAD        , Reg2   , None         , R100 , f(SPECIAL) , o(PSRAD)     , DNO16|DOPEQ|D66|DSSE        , OLB_0F   , LEGAL_R_R_RI   )
MACRO(PSRAW        , Reg2   , None         , R100 , f(SPECIAL) , o(PSRAW)     , DNO16|DOPEQ|D66|DSSE        , OLB_0F   , LEGAL_R_R_RI   )
MACRO(PSRLD        , Reg2   , None         , R010 , f(SPECIAL) , o(PSRLD)     , DNO16|DOPEQ|D66|DSSE        , OLB_0F   , LEGAL_R_R_RI   )
MACRO(PSRLDQ       , Reg2   , None         , R011 , f(SPECIAL) , o(PSRLDQ)    , DDST|DNO16|DOPEQ|D66|DSSE   , OLB_0F   , LEGAL_R_R_RI   )
MACRO(PSRLQ        , Reg2   , None         , RNON , f(MODRM)   , o(PSRLQ)     , DNO16|DOPEQ|D66|DSSE        , OLB_0F   , LEGAL_R_R_RI   )
MACRO(PSRLW        , Reg2   , None         , R010 , f(SPECIAL) , o(PSRLW)     , DNO16|DOPEQ|D66|DSSE        , OLB_0F   , LEGAL_R_R_RI   )
MACRO(PSUBB        , Reg2   , None         , RNON , f(MODRM)   , o(PSUBB)     , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PSUBD        , Reg2   , None         , RNON , f(MODRM)   , o(PSUBD)     , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PSUBQ        , Reg2   , None         , RNON , f(MODRM)   , o(PSUBQ)     , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PSUBSB       , Reg2   , None         , RNON , f(MODRM)   , o(PSUBSB)    , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PSUBSW       , Reg2   , None         , RNON , f(MODRM)   , o(PSUBSW)    , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PSUBUSB      , Reg2   , None         , RNON , f(MODRM)   , o(PSUBUSB)   , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PSUBUSW      , Reg2   , None         , RNON , f(MODRM)   , o(PSUBUSW)   , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PSUBW        , Reg2   , None         , RNON , f(MODRM)   , o(PSUBW)     , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PUNPCKLBW    , Reg2   , None         , RNON , f(MODRM)   , o(PUNPCKLBW) , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PUNPCKLDQ    , Reg2   , None         , RNON , f(MODRM)   , o(PUNPCKLDQ) , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PUNPCKLWD    , Reg2   , None         , RNON , f(MODRM)   , o(PUNPCKLWD) , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(PUSH         , Reg1   , OpSideEffect , R110 , f(PSHPOP)  , o(PUSH)      , 0                           , OLB_NONE , LEGAL_N_RMI    )
MACRO(PXOR         , Reg2   , None         , RNON , f(MODRM)   , o(PXOR)      , DNO16|DOPEQ|D66|DCOMMOP     , OLB_0F   , LEGAL_R_R_RM   )
MACRO(RET          , Empty  , OpSideEffect , RNON , f(SPECIAL) , o(RET)       , DSETCC                      , OLB_NONE , LEGAL_N_I_OR   )
MACRO(ROL          , Reg2   , None         , R000 , f(SHIFT)   , o(ROL)       , DOPEQ|DSETCC                , OLB_NONE , LEGAL_RM_RM_RI )
MACRO(ROR          , Reg2   , None         , R001 , f(SHIFT)   , o(ROR)       , DOPEQ|DSETCC                , OLB_NONE , LEGAL_RM_RM_RI )
MACRO(ROUNDSD      , Reg3   , None         , RNON , f(MODRM)   , o(ROUNDSD)   , DDST|DNO16|DSSE|D66         , OLB_0F3A , LEGAL_R_RM_I   )
MACRO(ROUNDSS      , Reg3   , None         , RNON , f(MODRM)   , o(ROUNDSS)   , DDST|DNO16|DSSE|D66         , OLB_0F3A , LEGAL_R_RM_I   )
MACRO(SAR          , Reg2   , OpSideEffect , R111 , f(SHIFT)   , o(SAR)       , DOPEQ|DSETCC                , OLB_NONE , LEGAL_RM_RM_RI )
MACRO(SBB          , Reg2   , None         , R011 , f(BINOP)   , o(SBB)       , DOPEQ|DUSECC|DSETCC         , OLB_NONE , LEGAL_RM_RM_RMI)
MACRO(SETA         , Reg1   , None         , RNON , f(MODRM)   , o(SETA)      , DOPEQ|DUSECC|DDST           , OLB_0F   , LEGAL_RM_RM    )
MACRO(SETAE        , Reg1   , None         , RNON , f(MODRM)   , o(SETAE)     , DOPEQ|DUSECC|DDST           , OLB_0F   , LEGAL_RM_RM    )
MACRO(SETB         , Reg1   , None         , RNON , f(MODRM)   , o(SETB)      , DOPEQ|DUSECC|DDST           , OLB_0F   , LEGAL_RM_RM    )
MACRO(SETBE        , Reg1   , None         , RNON , f(MODRM)   , o(SETBE)     , DOPEQ|DUSECC|DDST           , OLB_0F   , LEGAL_RM_RM    )
MACRO(SETE         , Reg1   , None         , RNON , f(MODRM)   , o(SETE)      , DOPEQ|DUSECC|DDST           , OLB_0F   , LEGAL_RM_RM    )
MACRO(SETG         , Reg1   , None         , RNON , f(MODRM)   , o(SETG)      , DOPEQ|DUSECC|DDST           , OLB_0F   , LEGAL_RM_RM    )
MACRO(SETGE        , Reg1   , None         , RNON , f(MODRM)   , o(SETGE)     , DOPEQ|DUSECC|DDST           , OLB_0F   , LEGAL_RM_RM    )
MACRO(SETL         , Reg1   , None         , RNON , f(MODRM)   , o(SETL)      , DOPEQ|DUSECC|DDST           , OLB_0F   , LEGAL_RM_RM    )
MACRO(SETLE        , Reg1   , None         , RNON , f(MODRM)   , o(SETLE)     , DOPEQ|DUSECC|DDST           , OLB_0F   , LEGAL_RM_RM    )
MACRO(SETNE        , Reg1   , None         , RNON , f(MODRM)   , o(SETNE)     , DOPEQ|DUSECC|DDST           , OLB_0F   , LEGAL_RM_RM    )
MACRO(SETO         , Reg1   , None         , RNON , f(MODRM)   , o(SETO)      , DOPEQ|DUSECC|DDST           , OLB_0F   , LEGAL_RM_RM    )
MACRO(SHL          , Reg2   , OpSideEffect , R100 , f(SHIFT)   , o(SHL)       , DOPEQ|DSETCC                , OLB_NONE , LEGAL_RM_RM_RI )
MACRO(SHLD         , Reg3   , OpSideEffect , R100 , f(SPECIAL) , o(SHLD)      , DDST                        , OLB_0F   , LEGAL_RM_R_I   )
MACRO(SHR          , Reg2   , OpSideEffect , R101 , f(SHIFT)   , o(SHR)       , DOPEQ|DSETCC                , OLB_NONE , LEGAL_RM_RM_RI )
MACRO(SHUFPD       , Reg2   , None         , RNON , f(MODRM)   , o(SHUFPD)    , DDST|DNO16|D66|DSSE         , OLB_0F   , LEGAL_R_RM_I   )
MACRO(SHUFPS       , Reg2   , None         , RNON , f(MODRM)   , o(SHUFPS)    , DDST|DNO16|DSSE             , OLB_0F   , LEGAL_R_RM_I   )
MACRO(SQRTPD       , Reg2   , None         , RNON , f(MODRM)   , o(SQRTPD)    , DDST|DNO16|D66              , OLB_0F   , LEGAL_R_RM     )
MACRO(SQRTPS       , Reg2   , None         , RNON , f(MODRM)   , o(SQRTPS)    , DDST|DNO16                  , OLB_0F   , LEGAL_R_RM     )
MACRO(SQRTSD       , Reg2   , None         , RNON , f(MODRM)   , o(SQRTSD)    , DDST|DNO16|DF2              , OLB_0F   , LEGAL_R_RM     )
MACRO(SQRTSS       , Reg2   , None         , RNON , f(MODRM)   , o(SQRTSS)    , DDST|DNO16|DF3              , OLB_0F   , LEGAL_R_RM     )
MACRO(SUB          , Reg2   , OpSideEffect , R101 , f(BINOP)   , o(SUB)       , DOPEQ|DSETCC                , OLB_NONE , LEGAL_RM_RM_RMI)
MACRO(SUBPD        , Reg3   , None         , RNON , f(MODRM)   , o(SUBPD)     , DNO16|DOPEQ|D66             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(SUBPS        , Reg3   , None         , RNON , f(MODRM)   , o(SUBPS)     , DNO16|DOPEQ                 , OLB_0F   , LEGAL_R_R_RM   )
MACRO(SUBSD        , Reg3   , None         , RNON , f(MODRM)   , o(SUBSD)     , DNO16|DOPEQ|DF2             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(SUBSS        , Reg3   , None         , RNON , f(MODRM)   , o(SUBSS)     , DNO16|DOPEQ|DF3             , OLB_0F   , LEGAL_R_R_RM   )
MACRO(TEST         , Empty  , OpSideEffect , R000 , f(TEST)    , o(TEST)      , DSETCC|DCOMMOP              , OLB_NONE , LEGAL_N_RM_RI  )
MACRO(TZCNT        , Reg2   , None         , RNON , f(MODRM)   , o(TZCNT)     , DF3|DSETCC|DDST             , OLB_0F   , LEGAL_R_RM     )
MACRO(UCOMISD      , Empty  , None         , RNON , f(MODRM)   , o(UCOMISD)   , DNO16|D66|DSETCC            , OLB_0F   , LEGAL_N_R_RM   )
MACRO(UCOMISS      , Empty  , None         , RNON , f(MODRM)   , o(UCOMISS)   , DNO16|DSETCC                , OLB_0F   , LEGAL_N_R_RM   )
MACRO(XCHG         , Reg2   , OpSideEffect , R000 , f(XCHG)    , o(XCHG)      , DOPEQ                       , OLB_NONE , LEGAL_RM_RM_RM )
MACRO(XOR          , Reg2   , OpSideEffect , R110 , f(BINOP)   , o(XOR)       , DOPEQ|DSETCC|DCOMMOP        , OLB_NONE , LEGAL_RM_RM_RMI)
MACRO(XORPS        , Reg3   , None         , RNON , f(MODRM)   , o(XORPS)     , DNO16|DOPEQ|DCOMMOP         , OLB_0F   , LEGAL_R_R_RM   )

#undef o
#undef f
